home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagn_r.zip / NUMBERS.SWG / 0060_Binary To Hex File Conversion.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-03  |  4KB  |  129 lines

  1. PROGRAM Hex4Bin;
  2. { Converts hex data file into binary (~64k maximum size) equivalent }
  3. { 20OCT94 Freeware v2.2  Hex-to-Binary file convertor by John Howard }
  4. {$i DATA4.HEX}
  5. (* layout of DATA4.HEX include file saves 40% compared to Hex_Byte array:
  6.   CONST
  7.        Name = { 'binary' } ;
  8.        { SizeL is equal to FILESIZE(BINARY) DIV 4 }
  9.        HEX_DATA : ARRAY[1..SizeL] OF LONGINT = (
  10.              { i.e. hex data such as $4500A2FF,.. } );
  11.        Size = { FILESIZE(BINARY) MOD 4 } ;
  12.        HEX_PAD : ARRAY[1..Size] OF BYTE = ( { $85,$8E,$05 } );
  13. *)
  14. VAR
  15.    BINARY : FILE;
  16. BEGIN
  17.     WRITELN('Howard International, P.O. Box 34633, NKC, MO 64116 USA');
  18.     WRITELN('20OCT94 Freeware v2.2  Hex-to-Binary (~64k maximum)');
  19.     ASSIGN(BINARY,'binary');
  20.     REWRITE(BINARY,1);
  21.     BLOCKWRITE(BINARY,HEX_DATA,SIZEOF(HEX_DATA));
  22.     IF Size <> 0 THEN
  23.       BLOCKWRITE(BINARY,HEX_PAD,SIZEOF(HEX_PAD));
  24.     CLOSE(BINARY);
  25.     WRITELN('You may rename BINARY to: ', Name);
  26. END.
  27.  
  28.  
  29.  
  30. PROGRAM Bin4Hex;
  31. { Converts binary file less than ~64k in size into hex data file equivalent }
  32. { 20OCT94 Freeware v2.2  Binary-to-Hex data convertor by John Howard }
  33. { Note: This longint approach saves 40% compared to bytes only. }
  34. FUNCTION HexByte(B : Byte) : String;
  35. CONST
  36.   HexDigits : ARRAY[0..15] OF Char = '0123456789ABCDEF';
  37. VAR Temp : String;
  38. BEGIN
  39.   Temp[0] := #2;
  40.   Temp[1] := HexDigits[B SHR 4];
  41.   Temp[2] := HexDigits[B AND $F];
  42.   HexByte := Temp;
  43. END;
  44.  
  45. FUNCTION HexLong(L : Longint) : String;
  46. CONST
  47.   HexDigits : ARRAY[0..15] OF Char = '0123456789ABCDEF';
  48. VAR Temp : String;
  49. BEGIN
  50.   Temp[0] := #8;
  51.   Temp[1] := HexDigits[(L SHR 28) AND $F];
  52.   Temp[2] := HexDigits[(L SHR 24) AND $F];
  53.   Temp[3] := HexDigits[(L SHR 20) AND $F];
  54.   Temp[4] := HexDigits[(L SHR 16) AND $F];
  55.   Temp[5] := HexDigits[(L SHR 12) AND $F];
  56.   Temp[6] := HexDigits[(L SHR 8) AND $F];
  57.   Temp[7] := HexDigits[(L SHR 4) AND $F];
  58.   Temp[8] := HexDigits[L AND $F];
  59.   HexLong := Temp;
  60. END;
  61.  
  62. VAR
  63.    Name : STRING;
  64.    BINARY : FILE;
  65.    HEXFILE : TEXT;
  66.    Hex_Byte : BYTE;
  67.    Hex_Long : LONGINT;
  68.    Size : LONGINT;
  69.    i : WORD;
  70. BEGIN
  71.   IF ParamStr(1) = '/?' THEN
  72.     BEGIN
  73.       WRITELN('Howard International, P.O. Box 34633, NKC, MO 64116 USA');
  74.       WRITELN('20OCT94 Freeware v2.2  Binary-to-Hex data convertor');
  75.       WRITELN('Syntax:  bin4hex.exe  [filename]');
  76.       WRITELN('Filename is optional, the default is called BINARY');
  77.       Halt;
  78.     END;
  79.     IF ParamCount = 0 THEN
  80.        Name := 'binary'
  81.     ELSE
  82.        Name := ParamStr(1);
  83.     WRITELN('Looking for file called: ', Name);
  84.     ASSIGN(BINARY,Name);
  85.     FileMode := 0;    { Read Only }
  86.     {$I-}   RESET(BINARY,1);  {$I+}
  87.     IF IOResult <> 0 THEN BEGIN
  88.       WRITELN('File not found.  Try the /? parameter.'); Halt;
  89.     END;
  90.     ASSIGN(HEXFILE,'DATA4.HEX');
  91.     REWRITE(HEXFILE);
  92.     Size := FILESIZE(BINARY) DIV 4;
  93.     WRITELN(HEXFILE, 'CONST Name = ''', Name,''';');
  94.     WRITELN(HEXFILE, '      HEX_DATA : ARRAY[1..', Size,'] OF LONGINT = (');
  95.     BLOCKREAD(BINARY,Hex_Long,SIZEOF(Hex_Long));
  96.     WRITE(HEXFILE, ' $');
  97.     WRITE(HEXFILE,HEXLONG(Hex_Long));
  98.     FOR i := 2 TO Size DO
  99.       BEGIN
  100.         BLOCKREAD(BINARY,Hex_Long,SIZEOF(Hex_Long));
  101.         WRITE(HEXFILE, ',$');
  102.         WRITE(HEXFILE,HEXLONG(Hex_Long));
  103.         IF (i MOD 7 = 0) THEN WRITELN(HEXFILE);   { columns }
  104.       END;
  105.     WRITELN(HEXFILE, ');');
  106.     Size := FILESIZE(BINARY) MOD 4;
  107.     IF Size <> 0 THEN
  108.       BEGIN
  109.          WRITELN(HEXFILE, '     Size = ', Size,';');
  110.          WRITE  (HEXFILE, '     HEX_PAD : ARRAY[1..', Size,'] OF BYTE = ($');
  111.          FOR i := 1 TO Size DO
  112.            BEGIN
  113.              BLOCKREAD(BINARY,Hex_Byte,SIZEOF(Hex_Byte));
  114.              IF i <> 1 THEN WRITE(HEXFILE, ',$');
  115.              WRITE(HEXFILE,HEXBYTE(Hex_Byte));
  116.            END;
  117.          WRITELN(HEXFILE, ');');
  118.       END
  119.     ELSE
  120.       BEGIN
  121.          WRITELN(HEXFILE, '     Size = 0;');
  122.          WRITELN(HEXFILE, '     HEX_PAD : ARRAY[1..1] OF BYTE = (0);');
  123.       END;
  124.     CLOSE(HEXFILE);
  125.     CLOSE(BINARY);
  126.     WRITELN('Your BINARY was converted to DATA4.HEX include file.');
  127. END.
  128.  
  129.